Universal Product Code

The Universal Product Code (UPC) is a barcode symbology (i.e., a specific type of barcode), that is widely used in North America, and in countries including the UK, Australia, and New Zealand for tracking trade items in stores. Its most common form, the UPC-A, consists of 12 numerical digits, which are uniquely assigned to each trade item. Along with the related EAN barcode, the UPC is the only barcode allowed for scanning trade items at the point of sale, per GS1 standards.[1] UPC data structures are a component of GTINs (Global Trade Item Numbers). All of these data structures follow the global GS1 standards.

Contents

Composition

Each UPC-A barcode consists of a scannable strip of black bars and white spaces, above a sequence of 12 numerical digits. No letters, characters, or other content of any kind may appear on a standard UPC-A barcode. The digits and bars maintain a one-to-one correspondence - in other words, there is only one way to represent each 12-digit number visually, and there is only one way to represent each visual barcode numerically.

The scannable area of every UPC-A barcode follows the pattern SLLLLLLMRRRRRRE, where the S (start), M (middle), and E (end) guard bars are represented exactly the same on every UPC and the L (left) and R (right) sections collectively represent the 12 numerical digits that make each UPC unique. The first digit L is the prefix. The last digit R is an error correcting check digit, allowing some errors in scanning or manual entry to be detected. The non-numerical identifiers, the guard bars, separate the two groups of six digits and establish the timing.

Standard UPC-A GTIN-12 number encoded in UPC-A Standard UPC-E*

123456 789999


1  23456 78999  9


234569

  • Note: UPC-A 123456789999 corresponds with UPC-E 234569 (with the EOOEOE parity pattern). Equivalent UPC-A and UPC-E barcodes share the same check digit, which is 9 in this case.

Formatting

UPC-A barcodes can be printed at various densities to accommodate a variety of printing and scanning processes. The significant dimensional parameter is called x-dimension, the ideal width of single module element. A single x-dimension must be used uniformly within a given UPC-A barcode. The width of each bar and space is determined by multiplying the x-dimension by the module width of each bar or space (1, 2, 3, or 4 units). Visually, a grouping of two or more adjacent bars appear as a single wide bar, while a grouping of two or more adjacent spaces appear as a single wide space. Since the guard bars each include two bars, and each of the 12 digits of the UPC-A barcode consists of two (wide) bars and two (wide) spaces, all UPC-A barcodes consist of exactly (3 × 2) + (12 × 2) = 30 (wide) bars, of which 24 represent numerical digits and 6 represent guard bars.

The x-dimension for the UPC-A at the nominal size is 0.33 mm (0.013 in.). Nominal symbol height for UPC-A is 25.9 mm (1.02 in.). In UPC-A the dark bars forming the Start, Middle, and End guard bars are extended downwards by 5 times x-dimension, with a resulting nominal symbol of height of 27.55 mm (1.08 in.) This also applies to the bars of the first and the last symbol characters of UPC-A symbol. UPC-A can be reduced or magnified anywhere from 80% to 200%.

A quiet zone, with a width of at least 9 times the x-dimension, must be present on each side of the scannable area of the UPC-A barcode.[2] UPC-E requires 9 X-dimension units on the left side and 7 on the right.[3] For a GTIN-12 number encoded in a UPC-A barcode symbol, the first and last digits are always placed outside the symbol to indicate the quiet zones that are necessary for barcode scanners to work properly.

Encoding

The UPC-A barcode is an optical pattern of bars and spaces that format and encode the UPC digit string. Each digit is represented by a unique pattern of two bars and two spaces. The bars and spaces are variable width; they may be 1, 2, 3, or 4 units (modules) wide. The total width for a digit is always 7 modules. To represent the 12 digits of the UPC-A code requires a total of 7×12 = 84 modules.

A complete UPC-A includes 95 modules: the 84 modules for the digits (L and R) combined with 11 modules for the start, middle, and end (S, M, and E) patterns. The S and E patterns are 3 modules wide and use the pattern bar-space-bar; each bar and space is one module wide. The M pattern is 5 modules wide and uses the pattern space-bar-space-bar-space; each bar and space is one module wide. In addition, a UPC symbol requires a quiet zone (additional space modules) before the S pattern and another quiet zone after the E pattern.

Quiet
Zone
Start Left Numerical Digits Middle Right Numerical Digits End Quiet
Zone
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9

Numbers on the right side of the middle guard bars are optically the inverse of the numbers to the left. In other words, while a number on the left side of the UPC will be made up of black bars and white spaces, the same number on the right side would be indicated by the inverse (what was black on the left is now white and what was white is now black). This inversion enables the bar code to be scanned from left-to-right or right-to-left. Left-side digits consist of an even number of white spaces and an odd number of black bars. Right side digits are the opposite. Using this difference, the scanning software knows if it read the code the correct way or upside down. In the illustration above, the "4" digit (shown in detail) is bar × 1, space × 1, bar × 3, space × 2. If the "4" digit were on the left hand side it would be space × 1, bar × 1, space × 3, bar × 2.

Numbering

UPC-A and UPC-E each provide a theoretical maximum of 1 trillion (10^12) unique barcodes, though in practice the number of barcodes is limited by the standards used to create them.

UPC-A: (10 possible values per digit ^ 6 left digits) × (10 possible values per digit ^ 6 right digits) = 1,000,000 × 1,000,000 = 1,000,000,000,000
UPC-E: 10 possible values per digit ^ 2 possible parities per digit ^ 6 digits = 100 permutations per digits ^ 6 digits = 1,000,000,000,000

Prefixes

Check digits

In the UPC-A system, the check digit is calculated as follows:

  1. Add the digits in the odd-numbered positions (first, third, fifth, etc.) together and multiply by three.
  2. Add the digits in the even-numbered positions (second, fourth, sixth, etc.) to the result.
  3. Find the result modulo 10 (i.e. the remainder when divided by 10.. 10 goes into 58 5 times with 8 leftover).
  4. If the result is not zero, subtract the result from ten.

For example, a UPC-A barcode (in this case, a UPC for a box of tissues) "03600029145X" where X is the check digit, X can be calculated by

The check digit is thus 2.

This should not be confused with the real numeral "X" which stands for a value of 10 in modulo 11.

Variations

UPC in its most common usage technically refers to UPC-A. Other variants of the UPC exist.

UPC-E

To allow the use of UPC barcodes on smaller packages where a full 12-digit barcode may not fit, a 'zero-compressed' version of UPC was developed called UPC-E. This symbology differs from UPC-A in that it only uses a 6-digit code, does not use middle guard bars, and the end bit pattern (E) becomes 010101. The way in which a 6-digit UPC-E relates to a 12-digit UPC-A is determined by the last (right-hand most) digit. With the manufacturer code represented by X's, and product code by N's then:

Last digit UPC-E equivalent is UPC-A equivalent is
0 XXNNN0 0XX000-00NNN + check
1 XXNNN1 0XX100-00NNN + check
2 XXNNN2 0XX200-00NNN + check
3 XXXNN3 0XXX00-000NN + check
4 XXXXN4 0XXXX0-0000N + check
5 XXXXX5 0XXXXX-00005 + check
6 XXXXX6 0XXXXX-00006 + check
7 XXXXX7 0XXXXX-00007 + check
8 XXXXX8 0XXXXX-00008 + check
9 XXXXX9 0XXXXX-00009 + check

For example a UPC-E barcode with the number 654321 would expand to the UPC-A 065100004327.

UPC-E check digits are calculated using this expanded string in the same way as used by UPC-A. The resulting check digit is not added to the barcode, however, but is encoded by manipulating the parity of the six digits which are present in the UPC-E - as shown in the following tables:

Check digit Parity pattern
0 EEEOOO
1 EEOEOO
2 EEOOEO
3 EEOOOE
4 EOEEOO
5 EOOEEO
6 EOOOEE
7 EOEOEO
8 EOEOOE
9 EOOEOE
Start Odd Parity Pattern Even Parity Pattern End
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9

3-2-1-1

2-2-2-1

2-1-2-2

1-4-1-1

1-1-3-2

1-2-3-1

1-1-1-4

1-3-1-2

1-2-1-3

3-1-1-2

1-1-2-3

1-2-2-2

2-2-1-2

1-1-4-1

2-3-1-1

1-3-2-1

4-1-1-1

2-1-3-1

3-1-2-1

2-1-1-3

Our example code 654321, therefore, would become 1-1-1 4-1-1-1 1-2-3-1 2-3-1-1 1-4-1-1 2-2-1-2 2-2-2-1 1-1-1-1-1-1. The resulting barcode would look roughly like this:

Note: The UPC can detect 100% of single digit errors and 89% of transposition errors.

EAN

The EAN was developed as a superset of UPC, adding an extra digit to the beginning of every UPC number. This expanded the number of unique values theoretically possible by ten times, from 1 trillion to 10 trillion. EAN-13 barcodes also indicate the country in which the company that sells the product is based (which may or may not be the same as the country in which the good is manufactured). The leading digits of the code determine this, according to the GS1 country codes. The EAN-13 encoding rules encode the leading 13th digit by modifying the encoding of the left-hand half of the barcode: the original rules for UPC are treated as a '0' if read as EAN-13. A UPC barcode XXXXXXXXXXXX therefore is the EAN-13 barcode 0XXXXXXXXXXXX. It is possible to prefix a UPC barcode with a 0, they become EAN-13 rather than UPC-A. This does not change the check digit. All point-of-sale systems can now understand both equally.

UPC usage notes:

Other variations

As the UPC becomes technologically obsolete, it is expected that UPC-B and UPC-C will disappear from common use by the 2010s. The UPC-D standard may be modified into EAN 2.0 or be phased out entirely.

History

Wallace Flint proposed an automated checkout system in 1932 using punched cards. Bernard Silver and Norman Joseph Woodland developed a bull's-eye style code and patented it (US patent 2612994, Norman J. Woodland and Bernard Silver, "Classifying Apparatus and Method", issued October 7, 1952 ). In the 1960s railroads experimented with a multicolor barcode for tracking railcars, but eventually abandoned it.

A group of grocery industry trade associations formed the Uniform Grocery Product Code Council which with consultants Larry Russell and Tom Wilson of McKinsey & Company, defined the numerical format of the Uniform Product Code. Technology firms including Charegon, IBM, Litton-Zellweger, Pitney Bowes-Alpex, Plessey-Anker, RCA, Scanner Inc. Singer and Dymo Industries/Data General proposed alternative symbol representations to the council. In the end the Symbol Selection Committee chose to slightly modify, changing the font in the human readable area, the IBM proposal designed by George J. Laurer.

The first UPC marked item ever scanned at a retail checkout (Marsh's supermarket in Troy, Ohio) was at 8:01 a.m. on June 26, 1974, and was a 10-pack (50 Sticks) of Wrigley's Juicy Fruit chewing gum.[4] The shopper was Clyde Dawson and cashier Sharon Buchanan made the first UPC scan. The cash register rang up 67 cents.[5] The entire shopping cart also had barcoded items in it, but the gum was merely the first one picked up. This item went on display at the Smithsonian Institution's National Museum of American History in Washington, D.C.[6]

IBM proposal

Around 1970 IBM at Research Triangle Park NC assigned George Laurer to solve the problem of a Super Market Scanner and label. In February 1971 Heard Baumeister joined Laurer then later William Crouse joined the effort. After many, many months they had made no progress. They were aware of the RCA Bulls Eye Label that could be scanned with a simple straight line laser scanner but a readable label was far too large. Although Litton Industries proposed a Bull’s Eye symbol cut in half to reduce the area it was still too large and presented the same ink smear printing problems as the RCA symbol. The redundancy and checking ability were removed completely.

The UPC Label above shows the general characteristics of Baumeister's proposals. He did not suggest any specific bar code so the image does not attempt to show exact coding of the ten digits required at that time. Also Baumeister's proposal did not include specific guard bars on the sides and center. It did include the split label that allowed the height to be reduced to nearly one half.

A change in management at IBM resulted in Baumeister, Crouse, and Laurer being assigned to different departments. Laurer was given sole responsibility for inventing and creating a viable code and symbol that would satisfy all the requirements.[7] He made several attempts based using the Delta C code invented by Crouse. Finally he devised a new code that also read distances from leading to leading and trailing to trailing edges of bars making it much less sensitive to the printer’s ink spreading degradation. Although this code was based upon the Delta C code, it required far less area. Unfortunately it still did not meet the 1.5 sq. in. requirement. Laurer’s final breakthrough was using the unique characteristics of his new code to invent a way to divide the symbol in halves in such a way that they could be reassembled in the correct order by the scanner. This reduced the necessary area by about 40% to 1.5 by 1.0 inches. The Delta C Code, also called Delta Distance Code was not "Character Independent". Dymo Industries, makers of hand-held printing devices insisted that the code be character independent, so that hand-held printing devices could produce the bar code in store if the items were not bar-coded by the manufacturers. Dymo's proposal was accepted by IBM and incorporated in IBM's latest proposal

The following table shows the workable labels, available in the early 1970s, with their sizes.

Check digit Parity pattern
Label Dimensions Area
Bulls-eye with Morse Code Large Large
Bulls-eye with Delta B 12.0" diameter 113.10 sq. in.
Bulls-eye with Delta A 9.0" diameter 63.62 sq. in.
Baumeister 1st w/ Delta B 6.0" × 5.8" 34.80 sq. in.
Baumeister 2 halves w/ Delta B 6.0" × 3.0" 18.00 sq. in.
Baumeister 2 halves w/ Delta A 4.5" × 2.3" 10.35 sq. in.
Baumeister with Delta C 1.5" × 0.9" 1.35 sq. in.

This is assuming a Bull’s eye with the same information and reliable readability.

Baumeister and Crouse were no longer involved in the creation of the code and symbol. Crouse designed a hand held device to read Laurer’s symbol, Baumeister did theoretical work on scanner designs. D. Savir, a mathematician was given the task of proving the symbol could be printed and would meet the reliability requirements. N. J. Woodland, the inventor of the Bull’s Eye code was responsible for writing the IBM proposal to the selection committee. A group under the direction of Art Hamburgen in Rochester, Minnesota designed and built a prototype scanner incorporating the architecture patented by Laurer. Dr. Sodastrum was the lead engineer on the scanner optics.

December 1, 1972 IBM presented Laurer’s proposal to the Super Market Committee in Rochester Minnesota, the location where IBM would develop the scanner. During the presentation Crouse gave a lab demonstration where he read UPC like labels with a simple hand held wand. In addition to reading regular labels he read the large two page center fold label in the proposal booklet. He then turned to a page showing a photo of labeled items sitting on a table. The labels were small and flawed due to the resolution of the printed photo but the wand read many of them. This demonstration showed the robustness of the pure Delta C code and the proposal was accepted. Later bar width measurements were added that violated the teachings of the Delta C patent.

Laurer continued his career with the UPC. He became known as the inventor of the UPC; without his persistence there might not have been an IBM proposal. Baumeister and Crouse moved on to other activities, Baumeister prior to the Rochester proposal and Crouse immediately after.

See also

References

  1. ^ http://www.gs1us.org/standards/barcodes/ean_upc
  2. ^ http://www.codeproject.com/KB/graphics/upc_a_barcode.aspx
  3. ^ UPC Symbol Specification Manual
  4. ^ Nelson, Benjamin (1997), From Punched Cards To Bar Codes. 
  5. ^ Alfred, Randy, "June 26, 1974: By Gum! There's a New Way to Buy Gum" Wired magazine 06.26.08
  6. ^ Harvard Magazine, September - October 2005
  7. ^ "Alumni Hall Of Fame Members". University of Maryland Alumni Association. The University of Maryland. 2005. Archived from the original on 2007-06-30. http://web.archive.org/web/20070623090457/http://www.alumni.umd.edu/about/alumnihallfame_bios.html. Retrieved 2009-06-10. "After graduating from Maryland in 1951, George Laurer joined IBM as a junior engineer and worked up the ranks to senior engineer. In 1969, he returned to the technical side of engineering and was later assigned the monumental task of designing a code and symbol for product identification for the Uniform Grocery Product Code Council. His solution—the Universal Product Code—radically changed the retail world. Since then, he has enhanced the code by adding a 13th digit." 

External links